{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ['KMP_DUPLICATE_LIB_OK']='True'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "from torch.autograd import Variable\n",
    "import torch as t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(data, net):\n",
    "    with t.no_grad():\n",
    "        #for index in range(test_data[0].shape[0]):\n",
    "            # get the inputs\n",
    "        inputs, labels = t.Tensor(data[0]), data[1]\n",
    "\n",
    "        # forward + backward + optimize\n",
    "        outputs = net(inputs)\n",
    "        _, predicted = t.max(outputs, 1)\n",
    "\n",
    "        correct = (predicted == t.Tensor(labels)).sum().item()\n",
    "        accuracy = correct / data[0].shape[0]\n",
    "        return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit(net, criterion, optimizer):\n",
    "    loss_scores = []\n",
    "    test_scores = []\n",
    "    train_scores = []\n",
    "    for epoch in range(100):  # loop over the dataset multiple times\n",
    "\n",
    "        # get the inputs\n",
    "        inputs, labels = t.Tensor(training_data[0]), t.Tensor(training_data[1])\n",
    "        vector_labels = t.Tensor([vectorized_result(y) for y in training_data[1]])\n",
    "        # zero the parameter gradients\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        # forward + backward + optimize\n",
    "        outputs = net(inputs)\n",
    "        loss = criterion(outputs, labels.long())\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        # print statistics\n",
    "        loss_scores.append(loss.item())\n",
    "        train_scores.append(predict(training_data, net))\n",
    "        test_scores.append(predict(test_data, net))\n",
    "    print('Finished Training')\n",
    "    return loss_scores, train_scores, test_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mnist_loader import load_data_shared, vectorized_result\n",
    "training_data, validation_data, test_data = load_data_shared(filename=\"../mnist.pkl.gz\",\n",
    "                                                                     seed=666,\n",
    "                                                                     train_size=1000,\n",
    "                                                                     vali_size=0,\n",
    "                                                                     test_size=100)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 前馈网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    " class Net1(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net1, self).__init__()\n",
    "        \n",
    "        self.fc1 = nn.Linear(28*28, 300)\n",
    "        self.fc2 = nn.Linear(300, 10)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = x.view(x.shape[0], -1)\n",
    "        x = F.relu(self.fc1(x))\n",
    "        x = F.logsigmoid(self.fc2(x))\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finished Training\n"
     ]
    }
   ],
   "source": [
    "import torch.optim as optim\n",
    "net1 = Net1()\n",
    "criterion1 = nn.CrossEntropyLoss()\n",
    "optimizer1 = optim.Adam(net1.parameters(), lr = 1e-3, weight_decay=1e-2)\n",
    "loss_scores1, train_scores1, test_scores1 = fit(net1, criterion1, optimizer1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(loss_scores1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(train_scores1)\n",
    "plt.plot(test_scores1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 卷积神经网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    " class Net2(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net2, self).__init__()\n",
    "        self.layer1 = nn.Sequential(\n",
    "            nn.Conv2d(1, 25, kernel_size=3),\n",
    "            nn.BatchNorm2d(25),\n",
    "            nn.ReLU(inplace=True)\n",
    "        )\n",
    " \n",
    "        self.layer2 = nn.Sequential(\n",
    "            nn.MaxPool2d(kernel_size=2, stride=2)\n",
    "        )\n",
    " \n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Linear(25 * 13 * 13, 300),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.Linear(300, 10),\n",
    "            nn.Sigmoid(),\n",
    "        )\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = self.layer1(x)\n",
    "        x = self.layer2(x)\n",
    "        x = x.view(x.size(0), -1)\n",
    "        x = self.fc(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict2(data, net):\n",
    "    with t.no_grad():\n",
    "        #for index in range(test_data[0].shape[0]):\n",
    "            # get the inputs\n",
    "        inputs, labels = t.Tensor(data[0]), data[1]\n",
    "        inputs = inputs.reshape(data[0].shape[0],1,28,-1)\n",
    "\n",
    "        # forward + backward + optimize\n",
    "        outputs = net(inputs)\n",
    "        _, predicted = t.max(outputs, 1)\n",
    "\n",
    "        correct = (predicted == t.Tensor(labels)).sum().item()\n",
    "        accuracy = correct / data[0].shape[0]\n",
    "        return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit2(net, criterion, optimizer):\n",
    "    loss_scores = []\n",
    "    test_scores = []\n",
    "    train_scores = []\n",
    "    for epoch in range(100):  # loop over the dataset multiple times\n",
    "\n",
    "        # get the inputs\n",
    "        inputs, labels = t.Tensor(training_data[0]), t.Tensor(training_data[1])\n",
    "        vector_labels = t.Tensor([vectorized_result(y) for y in training_data[1]])\n",
    "        # zero the parameter gradients\n",
    "        optimizer.zero_grad()\n",
    "\n",
    "        # forward + backward + optimize\n",
    "        inputs = inputs.reshape(training_data[0].shape[0],1,28,-1)\n",
    "        outputs = net(inputs)\n",
    "        loss = criterion(outputs, labels.long())\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        # print statistics\n",
    "        loss_scores.append(loss.item())\n",
    "        train_scores.append(predict2(training_data, net))\n",
    "        test_scores.append(predict2(test_data, net))\n",
    "    print('Finished Training')\n",
    "    return loss_scores, train_scores, test_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finished Training\n"
     ]
    }
   ],
   "source": [
    "import torch.optim as optim\n",
    "net2 = Net2()\n",
    "criterion2 = nn.CrossEntropyLoss()\n",
    "optimizer2 = optim.Adam(net2.parameters(), lr = 1e-3, weight_decay=1e-2)\n",
    "loss_scores2, train_scores2, test_scores2 = fit2(net2, criterion2, optimizer2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(loss_scores2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3dd3wU953/8ddHq5UEqCFUANFtTDHGwca44LjEJbjEvXefY5JcnB4ndi4/X9pdEqc4cexLzu3cK3YI4ZwjNu4NIzcwHVNFUUGgrq2f3x/fXWklraQFJMSuPs/HQw9pZkez39mR3vvZ73xnRlQVY4wxyS+tvxtgjDGmd1igG2NMirBAN8aYFGGBbowxKcIC3RhjUkR6fz1xYWGhjhs3rr+e3hhjktIHH3xQrapF8R7rt0AfN24cZWVl/fX0xhiTlERkc1ePWZeLMcakCAt0Y4xJET0Guog8JCKVIvJpF4+LiNwtIutFZJmIHNX7zTTGGNOTRCr0h4E53Tx+FjAx8jUX+PP+N8sYY8ze6jHQVfUNoKabRc4HHlXnPSBfREb0VgONMcYkpjf60EuBrTHT5ZF5nYjIXBEpE5GyqqqqXnhqY4wxUb0R6BJnXtxLOKrqfao6U1VnFhXFHUZpjDFmH/XGOPRyYHTM9Chgey+s1xgzQOxp8tPkDzEyf1B/N6VVbXOArTVNrdN5g7yMLhgcd9lAKEx1g4+KOh+VdS1U1PvY3ehn6GAvxblZlORmUZKbSWF2Jl5P3w0u7I1AXwDcIiJPA8cCtaq6oxfWa4xJMVtrmlixvY7K+hYq63xsrG5k+bZatkSCc9b4Aq4+dgxfPHw4jb4gFXU+KupbXEjW+ahp9BOO3MMhGFZ2RUK0ptHP2GGDmVaax+EjcwmEwlTW+aiq9zEow0NxbhbFOZn4gmEq61qorPfREgi1tmtwRjrFOZmU5Gaxs66Fl1dWsHRTDcFw+86GCUVDOH1KCVNH5LJ6Zz2fbqtlTUU91Q0+Erm1hAgMG5LB7WdN4eKjR/XeCxvRY6CLyFPAKUChiJQD/w54AVT1L8CLwNnAeqAJuLHXW2mMIRxWREAkXi8nNPmDrNheR5rAUWOGdlpu865GXl5VyeJVFWysbuSsaSO46tgxHFqcTTisbKhuZPm2PSwrr+XTbbWs3llPIBQGwCPCiRMLuerYsXz+0EIq6lt4+v2tzPugnF2NvrjtKcrJZHppPtNK86hvCbB4VSVrKupbH/ekCSPzsziiNI8rZ40hrMozS7fyrac/7vI1yMlKJz3NbVeaCMOyMyjJzWLU0EFsrG7k/jc2tAvhLG8a/mCYDrlMRnoaQzI8gOsfbvQFCYTaFppYnM3NJ03gyFH5eCLPt213E4tXV/I/b28kEFK8HmHS8BxOnVTEiLxBFOdmUpyTxfBINZ4/OIM9zX4q63zsrHVvIhWRN5NRQ/vmk4j01x2LZs6cqXbqvzEQCit7mvwMyUwny+tCZk+Tn1fXVPLq6io2VjdSUddCdYOPktwsTptSzGlTSsjNSmd5eS3LtrkAXl/Z0BpcEwqHcOWsMUwrzeP1tVUsXlXBusoGwIXV2GGDeX1tFYGQclhJNtt2N9PodxVrljeNw0fmMXVELoMjodfgC/KPT3dS0+inOCfTVaTA5ycWMWV4TqdtUmDb7maWbdvD1ppmPGnCMeOGcvqUEo4dP4zheVkUDMloDcuocFh557NdvL9xF8OyMynOyaQ411XORTmZZKZ7un0tWwIhPqtqIMvroSQ3i+zMdEIxlXymN42SnCxyB6W3e8NTVXY3BaioayE7M73LrhWA+pYA5bubmVA0pMf29AUR+UBVZ8Z9zALdmMT4g2GqGnzUtwRa53k9aRTnZJKd6QIiFFZ2Nfqoaw5SmJ1B3iBvp+BYsb2Ol1dV8Na6asp3N1PV4CMUSeL8wV4KBmewuaaJUFgpzM5kWmkuxTmZFOVksr6ygTfWVtMc011QmJ3J9FF5HFGax/RReexpCvDk+1v4YPNuANLThGMnFHDa5BJOn1LCmGEurKobfDxXVs47n1UzoXAI00rzOGJUHocWZZMep5/XFwyxaEUFCz/ZzqHF2Vw5a0y3wRe1p8mPiJA3yLtvL7xpxwLdpARVpd4XbO1PrYh8r20OcGhxNkeU5jGhaAjlu5tZVr6H1Tvr8QVcl0FYld1N7uNvZX0L/khXAkBOptdVgTlZhFSpqGuhqt5Hoz/YukyTL8SuRn+XbRuc4WFIZjo1jf7WcAb30b5wSAYejwv1Rl+ImkY/InDkqHwmFmdTkpvFsOyM1j7jqnofE0uyOW1KCdNL80jrUMW2BEIs2ViDPxjmiNI8SnIz43bDrN5Zx5ZdTRx3yDBysyxMU0V3gd5vV1s0pitV9T6Wb9vD8vI61lXWU9l6YMzXrjKNSk+T1n5TEVoPTnk9QlbMR+KhQzIozslk0vCc1vkK1DUHqKhvYcX2OjwilORlMbpgsKu6I7+bleGhJCeL4txMV3VH5rcEQ1TVu4/zDS1BinIyKcnNJCfLy65GP5V1LVQ3+IkWTuke4ZhxBZw6uZjC7Mx9en2yvB5OPqznYb+Th+cyeXjuPj2HSU4W6OaA8gfDLNm4i8WrKtsNCWv0B6ms91FZ56PB5ypjERhTMJjhuVkcOSq/dRRC68GnPDdyIcvrYWN1A8u31bKuooGxwwZzRGk+E0uy+3SImDEHGwt0s99UlZ11LTT5O1fPqrClppHl5XUsK9/Dko01NPiCZKancWhxNtGegqx0D1OG53LyYZmU5g/iiNI8Di/NIzszsT/RQ4tzOLS488E5YwYSC3STEF9M10J0HO/22mZW7ahnefkedjcFuv19ETikKJsvHTmC0yaXMPvQQgZlHPgRAsakMgv0AaIlEA3kFmqb28LXHwy3jo+tiBwwrKhriZzA4ZYJhsLUtQQ7rTM9TZhYksMZU0uYVprX5SiG4blZTCvNY0iC1bYxZt/Yf1iKCoWVj7fu4eVVFSxeVcHaioZul09Pk8gBvSzGFw5h5rgCPBI9gQOGZbuDfcU5Wa392AWDMzqNwDDG9B8L9BRTUdfCM0u38szSrWzb407omDWugO+cPpIR+S6M8wd5W/uu09PSLJyNSREW6ClgR20zi1dV8vKqCt5cV00orJx4aCE/mDOJUyYV2wkdxgwQFuhJYFN1Iy98tI2ayDUzVN2V4CrrfOysa2m9sNGYgsHc/PkJXHHMaMYVDunPJhtj+oEF+kGqwRfk1dWVPLN0K2+tryZNYOjgjNbHcwd5Kc7J5MjR+Vw5awynTymODAO0bhPTg6APdiyD0cck/jtblsDIz0F6gidD7foM0rMgL+69bjprqXW/U2q3JN4fFugHkdqmAAuWbeellRW899ku/KEwI/Oy+O4Zh3H5MaMpyc3q7yaaVFD2EPzfbfC1d6Fkas/LV6yEh86E038CJ34nsed46gpIS4evvg1pCZzc9b/fg0+fh1vKYNghiT2H6cQCvZ9s3tVIo8+diLOn2c/zH2xj4bLt+IJhxhcO4brjx3LalBJmjS/odEU6Y/bLhtfd95XzEwv0FX9t+55IoNdth+q17udVC+DwC7pfvmotLJ8HKLzxW7jQ7jO/ryzQDzBV5a6X1nL3K+vbzR+S4eHio0dxVeSSp8Z0Ul8B3izI6vD30VIL4RAMLuh5HeEQbH7H/bxiPpz6o+6XV3XBL2mw4xOo2QgF47v/nU1vu+9Z+fD6r2HKeW1Vekst+JsgN+Y+8m/8BryD3HLLnoGTb4WCCT23a8cn4Ktz055MGDUT0jqcrLbrM6jb1v26AIqmQHaH6+P4m9z6c4a3nx/0w7YyCHc+NyNhww6F3JH7/vtdsEA/wO56eR13v7Kei44q5cyp7g/F6xGOnTAs4dPczQAUDsODZ7jQuuSh9o/99Wuw+W24fgGMOLL79VR8Cr5aGH0cbH0PKldB8ZSul69c5artE78Db93lwr2nKn3zW5CZC3N+BfO/Cqv/DlPPh9pyePgcaKqBa//qtqV6PXw6D46/xX2tnA9v/A4uuLfr9avC4p+69sSaegFc/AB4IqO6Vv4NnrsRtPMlKTopPhy++lb77qF5/wIbX4ern4NxJ7p5/iZ48jLY9GbP6+zOOb+HY27av3XEYQlyAN310lruXryOy2aO4lcXTbdx3yZx28pgz2bw1btwjwZPKAAbXoVAEzx6Ply3AEZM73o9m95y38/6Fdx3qqvSuwv0lfMBgeP+FTa+4ZbvKdA3vQVjT4Dpl8Gbv4XX74TSo+Hhc12YDxoKj13oQv39+93B0xO+6Srko2+E9++Dk74Xv0pXhVd+7sL8qOtg+uWR53wbXvtPd42Jix6Atf9wgVx6NJx2B3Q3WGDr++4NIvrGA7DtA7eO9EHwxKVw9TwYOQOeuty9eZ51J5Qc3v3r0J2CvjlOYIF+AGzf08zPF67kH5/u5NKj9zHMm3dDQ2Xb9NDxkJ7R9fKJCIehZkPPFYx3MOSP7n6Zrvga3MgIj42F76SpJn43SfNuV+HGdh+smB95rAaqVrWFyfaPXJif/lMXjo+eB9f/HYYfEf85N73tgnLkDBe6K+fDqbd33cYV82HsbMgudmH30h2wexMMHece9zW4v4/oG0z9Tti1Ho663rX/pFvhr1+Bv5wIoSBcN991YTx8jgt1f4N7s4h2d8z+ljto++p/ut/taNkz8Obv3PrP/UPb84470XXbvPT/3P/J1iVuG695HrJ6uITwmOPh4yfcG8/kL7l1vn6ne+P58mJ3gPeJS93xhvIyuPC/4cjLu19nP7FA30f1LYHIjWnbj/eubQ6wrqKe6C0Olm6q4U+L16Mot35xEl87+ZC9D/PN78Djl0CgsW3e9Mvhovv2byPe+h288ovElj3lR3DKD/du/ZWr4JEvub7Ca+cn1sc7UOxYBvef6kLpqGvb5jdUwZ+Ohpk3whk/dfPCYdd9UHIEVCx3FXA00KMV9+euhqnnuSr4ycvhGx+6/vZY4bCrLqee56anXgD/uBUqV0Px5M5trFwN1Wtg1s2R5SOBvvJvLni3vOf+Lmdc4yr+2PZEuyimXeLCsaGyrZsF4PqFLtRDAbeuqNwRbtuX/AWWPxf/tTvquvZhHjX7m6BhePnfoXRmYmEOkTeeH8Bf58LqhZA3Ctb+H3zhx27EzfV/d69reRlc+JeDNszBAn2f+IIhrn5gCcvKaxlfOITTJhczPC+LV1ZX8v7GzncKP2NqCXecOzWh23V1svld90+TVwon/9B9dFy7CJY9C5//PhQdtm8b0VIL7/wJxp8ER9/Q/bJr/tH2cfbkHyS2/srVLszBBftjF7rqbNDQfWtvqnn91+6g2ut3ujfn6Ketd+52fdxL/huO/7qrjLd/CHXlLmBe/U8Xmsd+xS2/6S0omhypcIvggj+7Kv2jx9qCOKriU2jZA2MjYTv1PPjHD1xAxwv0aHfLlMgbwNBxrupdMd/1wT9+sft0sPQBOOEWF4SbIv3nwyPdPp50uGGh29b8MW3rzh8Nc1+Dxmq3jbFOu8NVzfE+OWbmwSFf6Hoo5Infdm8mxVMgYy9Orpt2sdsnr9/p/tey8mFW5DXOGQ5ffgn2bOn5GEU/s0DfBz9fuJJl5bV85aQJrNpZz6PvbsYfCrfeKXzWuILWGyvkD/a2jVrxNUA4zmVmPRnx//i2vAdPXOIq3Ov/3na0ffzJsOrv8Mad7iBQVDjswiCq48f2WEv+24X6mb/o+Y906gVuTPGr/wEIzPqym5+WDplxrkFetcaFuaS5Smz3Jnjm6ki/6XwYlN9+eVUXNL2tq/bFCgXB33YnerLyO/e3dmxfRvbedSGFQ+33w45lrhIcf5Lrl/7kSfem2ljtwnHsbNjyrgv3M3/hhgumeWHSWe4g3bp/ujaFg65r4cgr2tY9/iQXhm/+3lWysScCbY6MPhk3233PGe6WXfFXOHZu53avmO+6ZXJK2uZNvcBVwI9fBNklrmL9n7Pd8537e/ccY45zQR7V1WiOwQXxP7VlDOl5qGN3RsW9O1v3POmui2f+V92noFP/rX11P2hoUhQjFuh7af5H23j8vS185eQJ3H6WO5jU4AtS1xxgZP6grn/xzd+7gzka7vyYeNw/7vH/2jZvyxJXAeUMdxVO7NCpIYVwzJfh3Xtc1V440fXHPn6xq+aiCie5qrjjP1RLrfvdSWcnVnGkeeD8e12IvPoL9xV1wjfgjJ+3hWDVWvfxFFyYFx3mvi57DJ65pu1gWDTUA83wzLWw/qWe27EvTrrV/XPGOyhWs9EdSNyzuW3e2BPhqqfb3gj8jfDUlS5Io/JGw3V/S+wEmCX3wcs/gS/9EaZf6ua9/mtXaV72mHs93vyd6zJ550/u9Tj3Ljdv6YPuYOHKBa4qHZTvqs9PnoKq1a5t/oa27g2IfIr6ITx2AXz4aPsqfdNbrsrOG9U27/ALXJX+63Hx23/Wb9pPHx4J9Oxi93eZOxJmXO0+Ecy4xo2ImXFNz6/LweiIS12R1LSr7RNQkkko0EVkDvBHwAM8oKq/6vD4WOAhoAioAa5R1fJebmu/W1tRz+0vLGfWuAJuPXNS6/zszPTuhxy++Xt3FH3yue3/+aI+exUW3e7+GY/7mjvq/vjFrgK6fmHncbDg/tGXPuDG8M75lQumqjVw6o8hMxuCLe4kjUe+5NYRO+53yX0u1BPtPgEX6hf8lwuW5ho3b9uHLoRU3RtS9Tp45FxA4Yb/bd8dNGkOXP6YC+/HL3Kh7slwYbnhNZj97fjbuT+2vu9eH+gc6jUb3RtPoNG1PS3dHYx847eRUQ3PuU8YT1wGW95x3VtDCl21/dbv3e/esLD7UH//ftdHnZnn+mdFXPfI6oVw8m0uoE+5HZ681L3Bvn+/++hfNMm9ES1/Dl64GWq3wCm3uXWOjVTXm95ygR47L2rCKTD62LaRIOmZbf3nk89pv+xR17ltD8W5AbYnAz53Vft5Q8dF3qgntx3IPPG78NHjblQJxP8bTwaedLjiKfe6dhzrnyR6DHQR8QD3AmcA5cBSEVmgqitjFvst8KiqPiIiXwB+CVzbeW3JR1V5d8MunlyyhUUrdpI3yMufrppBeqL3qnzrLhfm0y5xR8c9cV7yY74Mz93gTsfevdn9c7RWQCM6Lw/un2nmv8B7/wU7l7uRBVc8CRPPaFtmzPHujeGRc13A5gyHljoXHofNcf2heyPN0/6AkKr7WPruPW443dpF7hPI9QtdKHU06Sy47BF49npXmWbluzA//56+qepmfcV9fH/jNy6coyfR7N7k3uj8Da4rK3aYX/EUmHeTC/W0dBfmF97XVl0DHHKqC/RHvuT2Ubzhde/fDy9+Hyad48ZUP321C+fCSa4r7LivuuUmnuH2w8s/AWKOURROdOG+/DnX3TL5bDd/6DjIHeXGQfub3Po69kFHq/THL3J/S8fcBJUr3RvWuM+3X9Y7aO/HQ4/vsI6hY13wf/goZOTA8IO7n7lb8Y4lJBGJ3o28ywVEjgd+oqpfjEzfDqCqv4xZZgXwRVUtF3d1qFpV7fbw8syZM7WsrGx/29+nVJWbH/2Al1dVkJuVzsVHj+LGE8YzZthgeOU/3D/V5U/AkGHxV/D2H92ogGkXu1CIF+ZRQT/Mu9FVbwUTXAD3dCZZQyX8Ybo7eHT5E3DYmZ2X2fyuC/VgswsoDbu+15tf7Z0LIam663CUPQiDC13AdTeuGWDVQnjueteO8+5pP8qjt4XD8PdvuGBL87qwCwddqHZ1Is6nz8PzNwPq3oSnX9Z5mZ2fukBv2eNe145CfjjsLLjsUXfA09fg3iS2vOPCNvYMzbWL3Mkq0y5uf9JQ1Vq4dxYcejpcM69t/gtzYf1id5Gt6Ze6LpqOVOHBM6F8qevvD4fc38m3P933Iajd2b3Jjc6ZcGr7tppeJyIfqGrcAwWJBPolwBxV/XJk+lrgWFW9JWaZJ4ElqvpHEbkIeB4oVNVdHdY1F5gLMGbMmKM3b97MwWzxqgpueqSMr596CN/4wkSyvJEDW3u2wt0z3AHOkmmuyut4cOedP8E/fwyHX+hOdOguzKOCfvjwEdc101Vl3tFnr7iDdKNndb3M9o/dSIboYMqCQ3o3RMNh+PhxGHMCFB6a2O9EuwwO+2LvtaMr4bB7w4meAi5prr+0uzeeDa+5EDz0tK6XqVrrxkXHG40xeBjMmtv+oKSvAZY/60a1xB4EV4UPHnafYDp2O62Y77o3YivHDx+FBd9wP1/ykHsjiNu+NfDJ07Tu9/yxbkhgX1n9oqvW9+eEG9Oj/Q30S3HVd2ygz1LVb8QsMxK4BxgPvAFcDByuqrVxVgkc/BV6MBTmi394A1VY9J2TWketALDwu+6f6ty7XHVaeJir9qKh/u69sOhHkVORH0wszI1JVM0GV1AAfG9t+1EoJuV1F+iJJE05EPsZbRSwPXYBVd0OXBR5smzg4u7C/KDTVOP6N8eeAJ//HgDPlG1la9UeXjvsebz/WABn/8b1Idduazuif9S1rpJ+6ir44+ciIyPUVYJTz49cV8LC3PSyoeMhZ6Sr8i3MTYxE0mYpMFFExgPbgCuAdoe+RaQQqFHVMHA7bsRLcmiqcSNEdi6D9S9DKEDD8d/nnn+u5Km8exm55X3Ygjvod+Ff3EFOVfj8d93vH3o6XPuCG0oW/bCTP8Y9bqe7m74g4goMz35e+sGknB4DXVWDInILsAg3bPEhVV0hIj8DylR1AXAK8EsRUVyXy9f7sM29JxrmVWvgqufcmXGv/ZJP1lXyc/+HHB36yHWrNO1yp8gHm90BrM9d1f6st3EnJu9QLZOcppzb3y0wB6GE+gNU9UXgxQ7z7oj5eR6QXIe2Q0E3+qNqdetwv60Fx7NlXRWztz3o3rrO+Z0bGgiu+n41Ml450i1jjDEHkwHbwdtQ9iTZ2z/kd9m3svrdoeR8+DH/u3wH3rQbeXTCGKZPP5r0o2J6lk6+te2g59Cx/dNoY4zpxoAM9KaWFur++Uu26Dg+zj+dqpomqup9nDG1hH87Zwoj8s6O/4t9cEF6Y4zpLQMu0AOhMI/f/zvmhrZTOfseHjvzuP5ukjHG9IoEz19PDarKj+Z9xGlVj7E7ZxKfO/3q/m6SMcb0mgFVoS/ZWEPgk3kckrHD3UKqq2sqG2NMEkr9QA+0uOt4t9QSWFfNDzPeI1w0lbTJNuzLGJNaUj/QP3wE3rmb0OBiDmv0Mygzk7Qzf27VuTEm5aR2qgVa3JmdY2dz5+F/44TAn2n4109g4un93TJjjOl1qR3oHz0G9Ttomf19nlq6lTmHD+/+rkLGGJPEUjfQgz53p6AxxzNv1wTqWoLcOHtcf7fKGGP6TOoG+oePQv12ds74Fg+/u5kjSvM4euzBf5NXY4zZVyl5ULSmth5d9Gu2MIkLnwkBDdxz1Qwk3o2CjTEmRaRkoK967Wlmh6r465hb+eW06cwYk8/k4d3eEc8YY5JeSgZ61rqF1JDHTdffhNgNJowxA0TK9aGHfY1MbXiXVUNPtjA3xgwoKRfo5UsXMAgf4Snn93dTjDHmgEq5QPd98gLVmsukWXP6uynGGHNApVagB5oZXf0GSzJPoDg/u79bY4wxB1RKBbp/9T/J0hZqxnVxgwpjjElhKXXUcE/Zc3g0h9EzzujvphhjzAGXOhV6oJm8rYt5SY9h1iHF/d0aY4w54FIn0De/TWa4iQ2FX2BwRkp98DDGmIQkFOgiMkdE1ojIehG5Lc7jY0TkVRH5SESWicgB78RuqNgAwIiJRx3opzbGmINCj4EuIh7gXuAsYCpwpYhM7bDYj4FnVXUGcAXwX73d0J5UbNtEWIXpkyce6Kc2xpiDQiIV+ixgvapuUFU/8DTQ8awdBaIXS8kDtvdeExMTrt/JLnIpLbBrthhjBqZEAr0U2BozXR6ZF+snwDUiUg68CHwj3opEZK6IlIlIWVVV1T40t2vpjZVUaj4FQzJ6db3GGJMsEgn0eNec1Q7TVwIPq+oo4GzgMRHptG5VvU9VZ6rqzKKior1vbTcymyupSSsgIz11jvMaY8zeSCT9yoHRMdOj6NylchPwLICqvgtkAYW90cBEDfZXU+cddiCf0hhjDiqJBPpSYKKIjBeRDNxBzwUdltkCnAYgIlNwgd67fSrdCYfIDe2mJbN3q35jjEkmPQa6qgaBW4BFwCrcaJYVIvIzETkvstj3gJtF5BPgKeAGVe3YLdN3GqtII4x/kJ1QZIwZuBI6A0dVX8Qd7Iydd0fMzyuB2b3btL1Qv8O1Y8jwfmuCMcb0t5Q4ghisdYGeljein1tijDH9JyUCvWlXOQAZ+SP7uSXGGNN/UiLQW3a7QTdDhlmXizFm4EqJQA/V7qBacynIzenvphhjTL9JiUCnfidVmk9hdmZ/t8QYY/pNSgR6elMlFTqUYdl22r8xZuBKiUDPaqmiWoaSk2nXQTfGDFzJH+jhEIMDNTR4CxGJd9kZY4wZGJI/0Bur8RCiOctO+zfGDGzJH+gNOwEIDLbT/o0xA1vyB3q9C3SybQy6MWZgS/pA10ige/Is0I0xA1vSB7pv9zYAsuy0f2PMAJf04/z8u7fTpNkU5GX3d1OMMaZfJX2FHqrb4U4qGmJniRpjBrakD3RpqKBK8+0sUWPMgJf0ge5tdqf9F9l1XIwxA1xyB3o4TJavmkryGTrEKnRjzMCW3IHetAuPhqj3FuL1JPemGGPM/kruFIzcS9SXZWeJGmNMcgd6QwUAQTvt3xhjEgt0EZkjImtEZL2I3Bbn8btE5OPI11oR2dP7TY2jodI9f07JAXk6Y4w5mPV4YpGIeIB7gTOAcmCpiCxQ1ZXRZVT1OzHLfwOY0Qdt7SzQBEB2tt16zhhjEqnQZwHrVXWDqvqBp4Hzu1n+SuCp3mhcT4IBHwB52XaWqDHGJBLopcDWmOnyyLxORGQsMB54Zf+b1rPmJleh5+VaoBtjTCKBHu82QNrFslcA81Q1FHdFInNFpExEyqqqqhJtY5eaml2g5+dYl4sxxiQS6OXA6JjpUcD2Lpa9gm66W1T1PlWdqaozi4r2/w5DLS3NBNRDUW7Wfq/LGGOSXSKBvhSYKCLjRSQDF9oLOi4kIpOAocC7vdvErvlamvGTToFdmMsYYyzlR8cAAAy+SURBVHoOdFUNArcAi4BVwLOqukJEfiYi58UseiXwtKp21R3T68JBH368DMn0HKinNMaYg1ZC10NX1ReBFzvMu6PD9E96r1kJCvrwk05WugW6McYk9ZmiEvThVy9Z3qTeDGOM6RXJnYQhV6Fn2IW5jDEmuQNdQn4C4kUk3shKY4wZWJI60NPCLtCNMcYkeaBLyE9Q7MYWxhgDSR7oaWE/IavQjTEGSPJA94T9hNKsQjfGGEj6QA9YhW6MMRHJHehqFboxxkQldaCnhwMW6MYYE5Hcga4B1GOBbowxkAKBHrZAN8YYIMkD3UsATbNL5xpjDCRzoKviJQDpVqEbYwwkc6CHg6Sh4LEK3RhjIJkDPehz361CN8YYIAUCXdKtQjfGGEjiQA/6mwELdGOMiUraQPf7WgALdGOMiUreQPe7QPd4s/q5JcYYc3BI2kAP+FyXS5rXKnRjjIGkDnRXoVugG2OMk1Cgi8gcEVkjIutF5LYulrlMRFaKyAoRebJ3m9lZIHJQ1LpcjDHGSe9pARHxAPcCZwDlwFIRWaCqK2OWmQjcDsxW1d0iUtxXDY4K+t2wxfQMq9CNMQYSq9BnAetVdYOq+oGngfM7LHMzcK+q7gZQ1crebWZnoehB0YzBff1UxhiTFBIJ9FJga8x0eWRerMOAw0TkbRF5T0Tm9FYDuxIMuEC3Ct0YY5weu1wAiTNP46xnInAKMAp4U0SmqeqedisSmQvMBRgzZsxeNzZWKNLl4s0YtF/rMcaYVJFIhV4OjI6ZHgVsj7PM31Q1oKobgTW4gG9HVe9T1ZmqOrOoqGhf2wxAKFKhezPtoKgxxkBigb4UmCgi40UkA7gCWNBhmfnAqQAiUojrgtnQmw3tKBxwFXqGBboxxgAJBLqqBoFbgEXAKuBZVV0hIj8TkfMiiy0CdonISuBV4FZV3dVXjQbQyMW5vJnW5WKMMZBYHzqq+iLwYod5d8T8rMB3I18HRDjoulwyMqxCN8YYSOIzRTXoByBzkFXoxhgDSRzoBFoIqZBpwxaNMQZI5kAP+fDjxZMWb1SlMcYMPMkb6EE/frz93QpjjDloJG2gS8hHQCzQjTEmKokD3U8wsUE6xhgzICRvoIf9BCSjv5thjDEHjaQN9LSQn6B1uRhjTKvkDfSwn1CaBboxxkQlbaB7wgGC1uVijDGtkjbQXYVugW6MMVFJG+jpGiBsgW6MMa2SNtA9ahW6McbEStpA92oA9VigG2NMVNIGeroFujHGtJO0ge7FAt0YY2Ilb6BrADx26VxjjIlKykAPh5VMq9CNMaadpAx0fyhMBgEk3Sp0Y4yJSspA9/n8eETBAt0YY1olaaA3AViFbowxMZIy0AO+FgDSvBboxhgTlVCgi8gcEVkjIutF5LY4j98gIlUi8nHk68u939Q2fl8zAGlWoRtjTKseb/kjIh7gXuAMoBxYKiILVHVlh0WfUdVb+qCNnfitQjfGmE4SqdBnAetVdYOq+oGngfP7tlndC/hdhe7JGNSfzTDGmINKIoFeCmyNmS6PzOvoYhFZJiLzRGR0r7SuC0GfDwCPVejGGNMqkUCXOPO0w/TfgXGqOh14GXgk7opE5opImYiUVVVV7V1LYwT9rsvF483a53UYY0yqSSTQy4HYinsUsD12AVXdpaq+yOT9wNHxVqSq96nqTFWdWVRUtC/tBSAYcIHuzbRAN8aYqEQCfSkwUUTGi0gGcAWwIHYBERkRM3kesKr3mthZKBLo6RkW6MYYE9XjKBdVDYrILcAiwAM8pKorRORnQJmqLgC+KSLnAUGgBrihD9tMyB8NdDsoaowxUT0GOoCqvgi82GHeHTE/3w7c3rtN61oo4Hp3vJl2UNQYY6KS8kzRcCTQM6xCN8aYVkkZ6NpaoVugG2NMVHIGejAyyiXDulyMMSYqSQPdVeiSbqNcjDEmKikDnUigk253LDLGmKikDHQN+t0Pdk9RY4xplZSBTihSoXu8/dsOY4w5iCRloEvIjx8vSLzLzBhjzMCUvIEu1n9ujDGxkjLQ08I+gmLdLcYYEyspA11CAQt0Y4zpICkD3RP2E7IuF2OMaScpAz0t7CeUZhW6McbESspA94QDVqEbY0wHyRno6iecZoFujDGxkjLQ0zVA2E4qMsaYdpI40O20f2OMiZV0ga6qeDWAWpeLMca0k3SBHggpmfhRjwW6McbESrpA9wVDZBC0Ky0aY0wHSRjoYTIkYNdCN8aYDpIz0AlaoBtjTAcJBbqIzBGRNSKyXkRu62a5S0RERWRm7zWxPV8gRAYBu/2cMcZ00GOgi4gHuBc4C5gKXCkiU+MslwN8E1jS242MFa3QJd360I0xJlYiFfosYL2qblBVP/A0cH6c5X4O3Am09GL7OvEFgnglRJrXKnRjjImVSKCXAltjpssj81qJyAxgtKou7G5FIjJXRMpEpKyqqmqvGwvga2kGIM0qdGOMaSeRQI93nzdtfVAkDbgL+F5PK1LV+1R1pqrOLCoqSryVMQJ+9wEgLcMC3RhjYiUS6OXA6JjpUcD2mOkcYBrwmohsAo4DFvTVgdGgz1XoHutyMcaYdhIJ9KXARBEZLyIZwBXAguiDqlqrqoWqOk5VxwHvAeepallfNDgYqdA9XqvQjTEmVo+BrqpB4BZgEbAKeFZVV4jIz0TkvL5uYEdBvw+A9Ayr0I0xJlZ6Igup6ovAix3m3dHFsqfsf7O6Fgy4LhcLdGOMaS/pzhRtrdCtD90YY9pJukDXoAt0b6YFujHGxEq6QL/wiELAAt0YYzpKukAnUqHbtVyMMaa9pA107AYXxhjTTvIFeigS6HbqvzHGtJN8gR70u+9WoRtjTDvJF+itFbr1oRtjTKzkC/RohW5dLsYY007yBXrIDooaY0w8yRfoBRNgynnW5WKMMR0kdC2Xg8rkc9yXMcaYdpKvQjfGGBOXBboxxqQIC3RjjEkRFujGGJMiLNCNMSZFWKAbY0yKsEA3xpgUYYFujDEpQlS1f55YpArYvI+/XghU92JzksVA3O6BuM0wMLd7IG4z7P12j1XVongP9Fug7w8RKVPVmf3djgNtIG73QNxmGJjbPRC3GXp3u63LxRhjUoQFujHGpIhkDfT7+rsB/WQgbvdA3GYYmNs9ELcZenG7k7IP3RhjTGfJWqEbY4zpwALdGGNSRNIFuojMEZE1IrJeRG7r7/b0BREZLSKvisgqEVkhIt+KzC8QkZdEZF3k+9D+bmtvExGPiHwkIgsj0+NFZElkm58RkZS796CI5IvIPBFZHdnnxw+Qff2dyN/3pyLylIhkpdr+FpGHRKRSRD6NmRd334pzdyTblonIUXv7fEkV6CLiAe4FzgKmAleKyNT+bVWfCALfU9UpwHHA1yPbeRuwWFUnAosj06nmW8CqmOlfA3dFtnk3cFO/tKpv/RH4P1WdDByJ2/6U3tciUgp8E5ipqtMAD3AFqbe/HwbmdJjX1b49C5gY+ZoL/HlvnyypAh2YBaxX1Q2q6geeBs7v5zb1OlXdoaofRn6ux/2Dl+K29ZHIYo8AF/RPC/uGiIwCzgEeiEwL8AVgXmSRVNzmXOAk4EEAVfWr6h5SfF9HpAODRCQdGAzsIMX2t6q+AdR0mN3Vvj0feFSd94B8ERmxN8+XbIFeCmyNmS6PzEtZIjIOmAEsAUpUdQe40AeK+69lfeIPwA+AcGR6GLBHVYOR6VTc3xOAKuB/Il1ND4jIEFJ8X6vqNuC3wBZckNcCH5D6+xu63rf7nW/JFugSZ17KjrsUkWzgeeDbqlrX3+3pSyJyLlCpqh/Ezo6zaKrt73TgKODPqjoDaCTFulfiifQbnw+MB0YCQ3BdDh2l2v7uzn7/vSdboJcDo2OmRwHb+6ktfUpEvLgwf0JVX4jMroh+BIt8r+yv9vWB2cB5IrIJ15X2BVzFnh/5SA6pub/LgXJVXRKZnocL+FTe1wCnAxtVtUpVA8ALwAmk/v6GrvftfudbsgX6UmBi5Eh4Bu4gyoJ+blOvi/QdPwisUtXfxzy0ALg+8vP1wN8OdNv6iqrerqqjVHUcbr++oqpXA68Cl0QWS6ltBlDVncBWEZkUmXUasJIU3tcRW4DjRGRw5O89ut0pvb8jutq3C4DrIqNdjgNqo10zCVPVpPoCzgbWAp8B/9bf7emjbTwR91FrGfBx5OtsXJ/yYmBd5HtBf7e1j7b/FGBh5OcJwPvAeuA5ILO/29cH2/s5oCyyv+cDQwfCvgZ+CqwGPgUeAzJTbX8DT+GOEQRwFfhNXe1bXJfLvZFsW44bAbRXz2en/htjTIpIti4XY4wxXbBAN8aYFGGBbowxKcIC3RhjUoQFujHGpAgLdGOMSREW6MYYkyL+Pyxn34nsycFmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(train_scores2)\n",
    "plt.plot(test_scores2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 效果对比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.plot(test_scores1)\n",
    "plt.plot(test_scores2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "卷积神经网络的效果明显更好  \n",
    "但运行时间明显更长"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
